/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.tramite.beans;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.http.Cookie;
import org.apache.myfaces.custom.fileupload.UploadedFile;
import org.cip.esymons.general.adapters.EmpleadoAdapter;
import org.cip.esymons.general.be.Area;
import org.cip.esymons.general.be.Cargo;
import org.cip.esymons.general.be.DireccionPersona;
import org.cip.esymons.general.be.Empleado;
import org.cip.esymons.general.be.PersonaJuridica;
import org.cip.esymons.general.be.PersonaNatural;
import org.cip.esymons.general.be.Solicitante;
import org.cip.esymons.general.util.ControladorAbstracto;
import org.cip.esymons.general.util.Utiles;
import org.cip.esymons.tramite.bc.AreaDelegate;
import org.cip.esymons.tramite.bc.CargoDelegate;
import org.cip.esymons.tramite.bc.DocumentoExternoDelegate;
import org.cip.esymons.tramite.bc.DocumentoGeneradoDelegate;
import org.cip.esymons.tramite.bc.DocumentoImagenDelegate;
import org.cip.esymons.tramite.bc.DocumentoIncluidoDelegate;
import org.cip.esymons.tramite.bc.EmpleadoDelegate;
import org.cip.esymons.tramite.bc.ExpedienteDelegate;
import org.cip.esymons.tramite.bc.OperacionDelegate;
import org.cip.esymons.tramite.bc.PersonaJuridicaDelegate;
import org.cip.esymons.tramite.bc.PersonaNaturalDelegate;
import org.cip.esymons.tramite.bc.PlantillaDelegate;
import org.cip.esymons.tramite.bc.ProcedimientoDelegate;
import org.cip.esymons.tramite.bc.TipoDocumentoDelegate;
import org.cip.esymons.tramite.bc.TramiteDelegate;
import org.cip.esymons.tramite.bc.TransaccionDelegate;
import org.cip.esymons.tramite.be.DocumentoExterno;
import org.cip.esymons.tramite.be.DocumentoGenerado;
import org.cip.esymons.tramite.be.DocumentoImagen;
import org.cip.esymons.tramite.be.DocumentoIncluido;
import org.cip.esymons.tramite.be.EnumAccionOperacion;
import org.cip.esymons.tramite.be.EnumEstadoOperacion;
import org.cip.esymons.tramite.be.Expediente;
import org.cip.esymons.tramite.be.Operacion;
import org.cip.esymons.tramite.be.Plantilla;
import org.cip.esymons.tramite.be.Procedimiento;
import org.cip.esymons.tramite.be.TipoDocumento;
import org.cip.esymons.tramite.be.Tramite;
import org.cip.esymons.tramite.be.Transaccion;

/**
 *
 * @author FreddyHIQ
 */
public class documentosController {

    private JasperController jasper;
    private PersonaJuridicaDelegate perJurDelegado;
    private PersonaNaturalDelegate personaDelegado;
    private PlantillaDelegate plantillaDelegado;
    private TipoDocumentoDelegate tipoDocdelegado;
    private TransaccionDelegate transaccionDelegado;
    private ExpedienteDelegate expedienteDelegado;
    private OperacionDelegate operacionDelegado;
    private TramiteDelegate tramiteDelegado;
    private ProcedimientoDelegate procediDelegado;
    private EmpleadoDelegate empleadoDelegado;
    private AreaDelegate areaDelegado;
    private CargoDelegate cargoDelegado;
    private DocumentoGeneradoDelegate documentoDelegado;
    private DocumentoIncluidoDelegate docIncluDelegado;
    private UploadedFile upFile;
    private EmpleadoAdapter empleadoAdap;
    private Empleado empleado;
    private Empleado empleadoSeleccionado;
    private Solicitante solicitante;
    private PersonaNatural persona;
    private PersonaJuridica empresa;
    private String sexoSol;
    private DireccionPersona direccionPersona;
    private Area areaSeleccionada;
    private Cargo cargoSeleccionado;
    private Plantilla plantillaSeleccionada;
    private DocumentoGenerado documento;
    private DocumentoIncluido documentoIncSelec;
    private TipoDocumento tipDocSeleccionado;
    private Expediente expediente;
    private Transaccion transaccion;
    private Operacion operacion;
    private Tramite tramite;
    private List<Operacion> operaciones;
    private List<EmpleadoAdapter> destinatarios;
    private List<EmpleadoAdapter> cc;
    private List<DocumentoIncluido> documentosRecibidos;
    private List<DocumentoGenerado> borradores;
    private boolean estadoCC;
    private boolean estadoComboArea;
    private boolean estadoComboCargo;
    private boolean respuesta;
    private boolean lectura;
    private boolean publico;
    private boolean cambioDoc;
    private int tipoDoc;
    private int tipoTrans;
    private int estadoCert;
    private Date fechIni;
    private Date fechaFin;
    private String nombre;
    private String asunto;
    private String editor = "";
    private String contenido = "";
    private String fecha;
    private String hora;
//    private int accion;
    private int anio;
    private EnumAccionOperacion accion;

    public documentosController() {
        perJurDelegado = new PersonaJuridicaDelegate();
        personaDelegado = new PersonaNaturalDelegate();
        documentoExtDelegado = new DocumentoExternoDelegate();
        documentoImaDelegado = new DocumentoImagenDelegate();
        plantillaDelegado = new PlantillaDelegate();
        tipoDocdelegado = new TipoDocumentoDelegate();
        empleadoDelegado = new EmpleadoDelegate();
        transaccionDelegado = new TransaccionDelegate();
        expedienteDelegado = new ExpedienteDelegate();
        operacionDelegado = new OperacionDelegate();
        tramiteDelegado = new TramiteDelegate();
        areaDelegado = new AreaDelegate();
        cargoDelegado = new CargoDelegate();
        procediDelegado = new ProcedimientoDelegate();
        documentoDelegado = new DocumentoGeneradoDelegate();
        docIncluDelegado = new DocumentoIncluidoDelegate();
        solicitante = new PersonaNatural();
        direccionPersona = new DireccionPersona();
        areaSeleccionada = new Area();
        operaciones = new ArrayList<Operacion>();
        documentosRecibidos = new ArrayList<DocumentoIncluido>();
        transacciones = new ArrayList<Transaccion>();
        destinatarios = new ArrayList<EmpleadoAdapter>();
        cc = new ArrayList<EmpleadoAdapter>();
        empleado = new Empleado();
        empleadoSeleccionado = new Empleado();
        nombre = new String();
        asunto = new String();
        docCargados = new ArrayList<DocumentoExterno>();
        docSeleccionado = new DocumentoExterno();
        tipoDoc = 1;
        estadoCC = false;
        estadoCert = 0;
        tipoTrans = 1;
        nroRef = "";
    }

    public List<EmpleadoAdapter> autocompletarDestinatarios(Object event) {
        List<EmpleadoAdapter> lista = new ArrayList();
        String cond = event.toString().toUpperCase();
        try {
            lista = empleadoDelegado.listarDestinatarioDocumento(cond);
        } catch (Exception ex) {
        }
        return lista;
    }

    public String eliminarArchivo() {
        int cant = docCargados.size();
        int i;
        for (i = 0; i < cant; i++) {
            if (docCargados.get(i).getCodigo() == docSeleccionado.getCodigo()) {
                break;
            }
        }
        docCargados.remove(i);
        return "";
    }

    public void cambiarContenido() {
        if (plantillaSeleccionada != null) {
            editor = plantillaSeleccionada.getPlaContenido();
        } else {
            editor = "";
        }
    }

    public String cambioPlantilla() {
        if (plantillaSeleccionada == null) {
            editor = "";
        } else {
            editor = plantillaSeleccionada.getPlaContenido();
        }
        return "";
    }

    public String cambioDoc() {
        cambioDoc = true;
        return "";
    }
    private List<DocumentoExterno> docCargados;
    private DocumentoExterno docSeleccionado;
    private int codigo = 1;

    public String upload1() {
        if (tipDocSeleccionado != null) {
            if (upFile != null) {
                DocumentoExterno doc = new DocumentoExterno(observacion, tipDocSeleccionado, upFile, codigo++, nroRef);
                doc.setSeleccionado(true);
                docCargados.add(doc);
            } else {
                mostrarMensaje("", "El tamaño del archivo debe ser mayor a 0 KB y menor de 800 KB", FacesMessage.SEVERITY_ERROR);
            }
        } else {
            mostrarMensaje("Tipo Documento: ", "No ha elegido un tipo de documento", FacesMessage.SEVERITY_ERROR);
        }
        return "";
    }

    public SelectItem[] getPlantillaCombo() {
        try {
            int i = 0;
            List<Plantilla> pla2 = plantillaDelegado.listarXSolicitante(empleado.getPersonaNatural(), tipDocSeleccionado);
            if (tipDocSeleccionado == null) {
                pla2 = new ArrayList<Plantilla>();
            }
            SelectItem[] select = new SelectItem[pla2.size()];
            if (cambioDoc) {
                editor = "";
            }
            if (publico) {
                List<Plantilla> pla = plantillaDelegado.listarXDocumento(tipDocSeleccionado);
                select = new SelectItem[pla.size() + pla2.size()];
                for (Plantilla pl : pla) {
                    if (cambioDoc) {
                        if (pl != null) {
                            plantillaSeleccionada = pl;
                            editor = pl.getPlaContenido();
                        }
                    }
                    SelectItem item = new SelectItem(pl, pl.getPlaNombre() + "(Publico)");
                    select[i++] = item;
                }
            }
            for (Plantilla pl : pla2) {
                if (cambioDoc) {
                    if (i == 0) {
                        if (pl != null) {
                            plantillaSeleccionada = pl;
                            editor = pl.getPlaContenido();
                        }
                    }
                }
                SelectItem item = new SelectItem(pl, pl.getPlaNombre());
                select[i++] = item;
            }
            cambioDoc = false;
            return select;
        } catch (Exception ex) {
            SelectItem[] select = new SelectItem[1];
            select[0] = new SelectItem(null, "No existen Plantillas");
            return select;
        }
    }

    public SelectItem[] getAreaItems() {
        try {
            List<Area> la = areaDelegado.listarXEmpleado(getEmpleado());
            SelectItem[] select = new SelectItem[la.size()];

            int i = 0;
            for (Area ev : la) {
                SelectItem item = new SelectItem(ev, ev.getAreNombre());
                select[i++] = item;
            }
            return select;
        } catch (Exception ex) {
            SelectItem[] select = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen Areas");
            select[0] = item;
            return select;
        }
    }

    public SelectItem[] getCargoItems() {
        try {
            List<Cargo> la = cargoDelegado.listarXAreayEmpleado(areaSeleccionada, empleado);
            SelectItem[] select = new SelectItem[la.size()];
            if (la.size() == 1) {
                setEstadoComboCargo(false);
                setCargoSeleccionado(la.get(0));
            }
            int i = 0;
            for (Cargo ev : la) {
                SelectItem item = new SelectItem(ev, ev.getCarDescripcion());
                select[i++] = item;
            }
            return select;
        } catch (Exception ex) {
            SelectItem[] select = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen Cargos");
            select[0] = item;
            return select;
        }
    }

    public String nuevoSol() {
        if (tipoDoc == 1) {
            persona = new PersonaNatural();
            return "nPer";
        } else {
            empresa = new PersonaJuridica();
            return "nEmp";
        }

    }

    public String buscarSol() {
        try {
            if (tipoDoc == 1) {
                persona = personaDelegado.buscarXDni(dniSolicitante);
            } else {
                empresa = perJurDelegado.buscaJuridicaPorRuc(dniSolicitante);
            }
        } catch (Exception e) {
            return "";
        }
        return "";
    }
    private boolean modalObserv;

    public String verObservacion() {
        modalObserv = true;
        return "";
    }

    public String aceptarObserv() {
        modalObserv = false;
        return "#";
    }
    private Plantilla plantilla;

    public String aceptarPlantilla() {
        plantilla.setFkSolCodigo(empleado.getPersonaNatural());
        plantilla.setFkTdoCodigo(tipDocSeleccionado);
        plantilla.setPlaActivo(true);
        plantilla.setPlaContenido(editor);
        plantilla.setPlaFecha(new Date());
        plantillaDelegado.create(plantilla);
        modalObserv = false;
        plantillaSeleccionada = plantilla;
        return "#";
    }

    public String cancelarPlantilla() {
        modalObserv = false;
        return "#";
    }
    private boolean modalAd;

    public String adjuntar() {
        if (modalAd) {
            modalAd = false;
        } else {
            modalAd = true;
        }
        return "";
    }
    private String ant;

    public String getAnt() {
        return ant;
    }

    public void setAnt(String ant) {
        this.ant = ant;
    }

    public String anterior() {
        int i = 0;
        i = documentosRecibidos.indexOf(documentoIncSelec);
        if (i == 0) {
            i = documentosRecibidos.size();
        }
        i--;
        documentoIncSelec = documentosRecibidos.get(i);
        ant = "" + 1;
        return "";
    }

    public String siguiente() {
        int i = 0;
        i = documentosRecibidos.indexOf(documentoIncSelec);
        if (i == documentosRecibidos.size() - 1) {
            i = -1;
        }
        i++;
        documentoIncSelec = documentosRecibidos.get(i);
        ant = "" + 1;
        return "";
    }

    public void drawImage(OutputStream output, Object object) throws IOException {
        try {
            File file = new File(documentoIncSelec.getFkDocCodigo().getDocumentoImagen().getDimRuta());
            FileInputStream inputStream = new FileInputStream(file);
            int tamanoInput = inputStream.available();
            byte[] datosPDF = new byte[tamanoInput];
            inputStream.read(datosPDF, 0, tamanoInput);
            output.write(datosPDF, 0, tamanoInput);
        } catch (Exception e) {
            mostrarMensaje(e.toString(), e.getMessage(), FacesMessage.SEVERITY_ERROR);
        }
    }
    private static final String extImagen = "jpg,jpeg,gif,bmp,png,tif";

    public String transferir() {
        limpiarExt();
        lectura = false;
        if (operacion.getOpeAccion().equals(EnumAccionOperacion.Solo_Lectura)) {
            lectura = true;
        }
        tamDesc = "100";
        nroRef = "";
        modalAd = false;
        estadoCC = false;
        descripcion = operacion.getOpeDescripcion();
        List<DocumentoIncluido> documentIncluidos = new ArrayList<DocumentoIncluido>();
        documentIncluidos = docIncluDelegado.listarXOperacion(operacion);
        documentosRecibidos = new ArrayList<DocumentoIncluido>();
        for (DocumentoIncluido doc : documentIncluidos) {
            doc.getFkDocCodigo().setDocumentoImagen(documentoImaDelegado.find(doc.getFkDocCodigo().getDocCodigo()));
            if (doc.getFkDocCodigo().getDocumentoImagen() == null) {
                doc.setTipo(1);
            } else if (extImagen.contains(doc.getFkDocCodigo().getDocumentoImagen().getDimExt())) {
                doc.setTipo(2);
            } else {
                doc.setTipo(3);
            }
            documentosRecibidos.add(doc);
        }
        return "trans";
    }

    public String verArch() {
        limpiarExt();
        descripcion = operacion.getOpeDescripcion();
        List<DocumentoIncluido> documentIncluidos = new ArrayList<DocumentoIncluido>();
        documentIncluidos = docIncluDelegado.listarXOperacion(operacion);
        documentosRecibidos = new ArrayList<DocumentoIncluido>();
        for (DocumentoIncluido doc : documentIncluidos) {
            doc.getFkDocCodigo().setDocumentoImagen(documentoImaDelegado.find(doc.getFkDocCodigo().getDocCodigo()));
            if (doc.getFkDocCodigo().getDocumentoImagen() == null) {
                doc.setTipo(1);
            } else if (extImagen.contains(doc.getFkDocCodigo().getDocumentoImagen().getDimExt())) {
                doc.setTipo(2);
            } else {
                doc.setTipo(3);
            }
            documentosRecibidos.add(doc);
        }
        return "ver";
    }

    public String verImagen() {
        return "";
    }
    private List<Transaccion> transacciones;

    public String listarTransXEmpleado() {
        try {
            operaciones = operacionDelegado.listarExterXEmpleado(empleado.getFkPerCodigopna());
            for (Operacion ope : operaciones) {
                if (ope.getOpeEstado().equals(EnumEstadoOperacion.Iniciado)) {
                    ope.setOpeEstado(EnumEstadoOperacion.recepcionado);
                    ope.setOpeFechRecep(new Date());
                    operacionDelegado.edit(ope);
                }
            }
            return "buscar";
        } catch (Exception e) {
            mostrarMensaje("Mal", e.getMessage(), FacesMessage.SEVERITY_ERROR);
            return "buscar";
        }
    }

    public String listarTransArchXEmpleado() {
        try {
            operaciones = operacionDelegado.listarArchExterXEmpleado(empleado.getFkPerCodigopna());
            return "buscar";
        } catch (Exception e) {
            mostrarMensaje("Mal", e.getMessage(), FacesMessage.SEVERITY_ERROR);
            return "buscar";
        }
    }

    public String listarDocExtXUsuario() {
        try {
            documentosRecibidos = docIncluDelegado.listarDocExtXEmpleado(empleado);
            return "buscar";
        } catch (Exception e) {
            mostrarMensaje("", e.getMessage(), FacesMessage.SEVERITY_ERROR);
            return "buscar";
        }
    }

    public String listarDocumentosXUsuario() {
        try {
            documentosRecibidos = docIncluDelegado.listarDocumentosXEmpleado(empleado);
            for (DocumentoIncluido di : documentosRecibidos) {
                if (di.getFkOpeCodigo().getOpeEstado().equals(EnumEstadoOperacion.Iniciado)) {
                    di.getFkOpeCodigo().setOpeEstado(EnumEstadoOperacion.recepcionado);
                    di.getFkOpeCodigo().setOpeFechRecep(new Date());
                    operacionDelegado.edit(di.getFkOpeCodigo());
                }
            }
            return "buscar";
        } catch (Exception e) {
            mostrarMensaje("", e.getMessage(), FacesMessage.SEVERITY_ERROR);
            return "buscar";
        }
    }

    public String listarBorradoresXUsuario() {
        try {
            borradores = documentoDelegado.listarBorradoresXSolicitante(empleado.getPersonaNatural());
            return "buscar";
        } catch (Exception e) {
            mostrarMensaje("", e.getMessage(), FacesMessage.SEVERITY_ERROR);
            return "buscar";
        }
    }

    public String listarArchivadosXUsuario() {
        try {
            documentosRecibidos = docIncluDelegado.listarArchivadosXEmpleado(empleado);
            return "buscar";
        } catch (Exception e) {
            mostrarMensaje("", e.getMessage(), FacesMessage.SEVERITY_ERROR);
            return "buscar";
        }
    }

    public String listarEnviadosXUsuario() {
        try {
            documentosRecibidos = docIncluDelegado.listarEnviadosXEmpleado(empleado);
            return "buscar";
        } catch (Exception e) {
            mostrarMensaje("", e.getMessage(), FacesMessage.SEVERITY_ERROR);
            return "buscar";
        }
    }

    public String guardar() {
        plantilla = new Plantilla();
        modalObserv = true;
        return "";
    }

    private void limpiar() {
        estadoCC = false;
        destinatarios.clear();
        cc.clear();
        asunto = "";
        tipDocSeleccionado = new TipoDocumento();
        publico = false;
        plantillaSeleccionada = new Plantilla();
        editor = "";
    }
    private String nroRef;
    private int nroFolios;
    private String descripcion;
    private String observacion;

    private void limpiarExt() {
        tipoDoc = 1;
        dniSolicitante = "";
        persona = new PersonaNatural();
        persona.setPerNombres("");
        persona.setPerapellidoMaterno("");
        persona.setPerapellidoPaterno("");
        empresa = new PersonaJuridica();
        empresa.setEmprazonSocial("");
        descripcion = "";
        nroRef = "";
        observacion = "";
        docCargados.clear();
        destinatarios.clear();
        documentosRecibidos.clear();
        cc.clear();
        transaccion = new Transaccion();
        solicitante = new Solicitante();
        //AGREGADO POR WILLIAM
        tipDocSeleccionado = new TipoDocumento();
    }

    public String enviarDoc() {
        int i = 1;
        cargoSeleccionado = cargoDelegado.buscar("Asistente Administrativo Decanato");
        if (cargoSeleccionado != null) {
            try {
                empleadoSeleccionado = empleadoDelegado.listarEmpleadoXCargo(cargoSeleccionado.getCarDescripcion()).get(0);
            } catch (ArrayIndexOutOfBoundsException e) {
                mostrarMensaje("", "No se encontraron responsables en decanato", FacesMessage.SEVERITY_ERROR);
                return "";
            } catch (Exception e) {
                mostrarMensaje(e.toString(), e.getMessage(), FacesMessage.SEVERITY_ERROR);
                return "";
            }
            if (descripcion.equals("")) {
                mostrarMensaje("", "debe ingresar un asunto", FacesMessage.SEVERITY_ERROR);
            } else {
                tramite = tramiteDelegado.buscar("Documento Externo");
                expediente = new Expediente(null, new Date(), nroFolios);
                setTransaccion(new Transaccion(null, new Date(), false, new Short("0")));
                if (creoSol) {
                    if (tipoDoc == 1) {
                        personaDelegado.create(persona);
                        solicitante = persona;
                    } else {
                        perJurDelegado.create(empresa);
                        solicitante = empresa;
                    }
                }
                if (tipoDoc == 1) {
                    solicitante = persona;
                } else {
                    solicitante = empresa;
                }
                getTransaccion().setFkSolCodigo(solicitante);
                getTransaccion().setFkSolicitado(solicitante);
                getTransaccion().setFkTrmCodigo(tramite);
                expedienteDelegado.create(expediente);
                getTransaccion().setFkExpCodigo(expediente);
                transaccionDelegado.create(getTransaccion());
                operacion = operacionDelegado.crearOperacion(getTransaccion());
                operacion.setCarCodigo(cargoSeleccionado);
                operacion.setFkResCodigo(empleadoSeleccionado);
                operacion.setOpeAccion(EnumAccionOperacion.Informacion);
                operacion.setOpeDescripcion(descripcion);
                operacionDelegado.edit(operacion);
                getTransaccion().setOperacionActiva(operacion);
                for (DocumentoExterno doc : docCargados) {
                    grabarImg(doc, doc.getFkTdoCodigo().getTdoDesc() + i++);
                }
            }
        } else {
            mostrarMensaje("", "El Cargo Asistente Administrativo Decanato no esta configurado", FacesMessage.SEVERITY_ERROR);
            return "";
        }
        mostrarMensaje("", "Los documentos se enviaron satisfactoriamente a Decanato con Nro de Expediente: " + transaccion.getTraCodigo().toString(), FacesMessage.SEVERITY_INFO);
        limpiarExt();
        return "";
    }
    private DocumentoExterno documentoExterno;
    private DocumentoImagen docImagen;
    private DocumentoIncluido docIncluido;
    private DocumentoExternoDelegate documentoExtDelegado;
    private DocumentoImagenDelegate documentoImaDelegado;
//    private final String direccion = "D:\\Archivos\\";
    private final String direccion = "/modulos/tramite/img/";

    private DocumentoIncluido grabarImg(DocumentoExterno doc, String nombre) {
        try {
            String extencion;
            String archivo;
            documentoExterno = new DocumentoExterno();
            documentoExterno.setDocFecha(new Date());
            documentoExterno.setFkTdoCodigo(doc.getFkTdoCodigo());
            documentoExterno.setDocNumero(doc.getDocNumero());
            documentoExterno.setDocEstado(1);
            documentoExterno.setFkPerCodigoemp(empleado);
            documentoExterno.setFkSolCodigo(solicitante);
            documentoExtDelegado.create(documentoExterno);
            extencion = doc.getUpFile().getName().substring(doc.getUpFile().getName().length() - 4, doc.getUpFile().getName().length());
            archivo = documentoExterno.getDocCodigo().toString();
            InputStream stream = doc.getUpFile().getInputStream();
            OutputStream out = new FileOutputStream(direccion.concat(archivo.concat(extencion)));
            long size = doc.getUpFile().getSize();
            byte[] buffer = new byte[(int) size];
            stream.read(buffer, 0, (int) size);
            out.write(buffer, 0, (int) size);
            stream.close();
            out.close();

            docImagen = new DocumentoImagen(documentoExterno.getDocCodigo(), nombre, direccion.concat(archivo.concat(extencion)));
            docImagen.setDimExt(extencion.substring(1, 4));
            documentoImaDelegado.create(docImagen);

            docIncluido = new DocumentoIncluido();
            docIncluido.setDicObservacion(doc.getDocObservacion());
            docIncluido.setObservar(doc.getDocObservacion());
            docIncluido.setFkExpCodigo(expediente);
            docIncluido.setFkOpeCodigo(operacion);
            docIncluido.setFkDocCodigo(documentoExterno);
            docIncluido.setDicLectura(false);
            docIncluDelegado.create(docIncluido);
            return docIncluido;
        } catch (Exception e) {
            System.out.println(e.getMessage());
            mostrarMensaje("Mal", "Los Archivos no se grabaron", FacesMessage.SEVERITY_ERROR);
            return null;
        }
    }
    private String dniSolicitante;

    public String cancelarModalSol() {
        persona = new PersonaNatural();
        empresa = new PersonaJuridica();
        return "cert";
    }

    public String aceptarModalSol() {
        if (tipoDoc == 1) {
            if (persona.getPerapellidoMaterno().isEmpty() || persona.getPerapellidoPaterno().isEmpty() || persona.getPerNombres().isEmpty() || persona.getPerNroDNI().isEmpty()) {
                mostrarMensaje("", "La persona no se creo por que faltan datos", FacesMessage.SEVERITY_WARN);
            } else {
                if (personaDelegado.buscarXDni(persona.getPerNroDNI()) != null) {
                    mostrarMensaje("Duplicado: ", "La persona ya existe", FacesMessage.SEVERITY_WARN);
                } else {
                    setDniSolicitante(persona.getPerNroDNI());
                    persona.setPerTipo(0);
                    if (sexoSol.equals("1")) {
                        persona.setPerSexo(true);
                    } else {
                        persona.setPerSexo(false);
                    }
                    creoSol = true;
                }
            }
        } else {
            if (empresa.getRubCodigo().getRubCodigo() != 0) {
                if (!empresa.getEmprazonSocial().isEmpty()) {
                    if (empresa.getSolRUC().isEmpty()) {
                        mostrarMensaje("Error: ", "No se creo al solicitante por que no se ingresaron correctamente los datos", FacesMessage.SEVERITY_WARN);
                    } else {
                        if (perJurDelegado.buscaJuridicaPorRuc(empresa.getSolRUC()) != null) {
                            mostrarMensaje("Duplicado: ", "El solicitante ya existe", FacesMessage.SEVERITY_WARN);
                        } else {
                            creoSol = true;
                            dniSolicitante = empresa.getSolRUC();
                        }
                    }
                } else {
                    mostrarMensaje("Error: ", "No se creo al solicitante por que no se ingresaron correctamente los datos", FacesMessage.SEVERITY_WARN);
                }
            } else {
                mostrarMensaje("Error: ", "Debe seleccionar un rubro para la Empresa", FacesMessage.SEVERITY_WARN);
            }
        }
        return "cert";
    }
    private boolean creoSol;

    public String guardartransf() {
        accion = EnumAccionOperacion.Envia;
        guardarExt();
        operacion.setOpeEstado(EnumEstadoOperacion.Transferido);
        operacionDelegado.edit(operacion);
        return "";
    }

    public String guardarExt() {
        int i = 1;
        Operacion operacion2 = new Operacion();
        solicitante = operacion.getFkTraCodigo().getFkSolicitado();
        if (destinatarios.size() < 1) {
            mostrarMensaje("", "debe elegir un destinatario", FacesMessage.SEVERITY_ERROR);
        } else {
            List<Procedimiento> procedimientos = new ArrayList<Procedimiento>();
            if (operacion.getFkProCodigo().getProNombre().equals("Inicio") || accion.equals(EnumAccionOperacion.Respuesta)) {
                transaccion = operacion.getFkTraCodigo();
                transaccion.setOperacionActiva(operacion);
                procedimientos = procediDelegado.nextProced(transaccion);
            } else {
                procedimientos = new ArrayList<Procedimiento>();
                procedimientos.add(operacion.getFkProCodigo());
            }
            List<DocumentoIncluido> docGuardados = new ArrayList<DocumentoIncluido>();
            expediente = operacion.getFkTraCodigo().getFkExpCodigo();
            for (DocumentoExterno doc : docCargados) {
                if (doc.isSeleccionado()) {
                    docGuardados.add(grabarImg(doc, doc.getFkTdoCodigo().getTdoDesc() + i++));
                }
            }
            for (EmpleadoAdapter emp : destinatarios) {
                if (emp.isEmplead()) {
                    operacion2 = new Operacion(EnumEstadoOperacion.Iniciado, operacion, new Date(), descripcion, operacion.getFkTraCodigo(), procedimientos.get(0), emp.getEmpleado(), emp.getCargo(), accion);
                    operacionDelegado.create(operacion2);
                } else {
                    for (Empleado empl : empleadoDelegado.listarEmpleadoXArea(emp.getArea().getAreCodigo())) {
                        operacion2 = new Operacion(EnumEstadoOperacion.Iniciado, operacion, new Date(), descripcion, operacion.getFkTraCodigo(), procedimientos.get(0), empl, empl.getCargoEmpleadoCollection().get(0).getCargo(), accion);
                        operacionDelegado.create(operacion2);
                    }
                }
                for (DocumentoIncluido ci : documentosRecibidos) {
                    if (ci.isSeleccionado()) {
                        docIncluDelegado.create(new DocumentoIncluido(ci.getObservar(), operacion.getFkTraCodigo().getFkExpCodigo(), operacion2, ci.getFkDocCodigo()));
                    }
                }
                for (DocumentoIncluido ci : docGuardados) {
                    docIncluDelegado.create(new DocumentoIncluido(ci.getObservar(), operacion.getFkTraCodigo().getFkExpCodigo(), operacion2, ci.getFkDocCodigo()));
                }
            }
            for (EmpleadoAdapter emp : cc) {
                if (emp.isEmplead()) {
                    operacion2 = new Operacion(EnumEstadoOperacion.Iniciado, operacion, new Date(), descripcion, operacion.getFkTraCodigo(), procedimientos.get(0), emp.getEmpleado(), emp.getCargo(), EnumAccionOperacion.Solo_Lectura);
                    operacionDelegado.create(operacion2);
                } else {
                    for (Empleado empl : empleadoDelegado.listarEmpleadoXArea(emp.getArea().getAreCodigo())) {
                        operacion2 = new Operacion(EnumEstadoOperacion.Iniciado, operacion, new Date(), descripcion, operacion.getFkTraCodigo(), procedimientos.get(0), empl, empl.getCargoEmpleadoCollection().get(0).getCargo(), EnumAccionOperacion.Solo_Lectura);
                        operacionDelegado.create(operacion2);
                    }
                }
                for (DocumentoIncluido ci : documentosRecibidos) {
                    if (ci.isSeleccionado()) {
                        docIncluDelegado.create(new DocumentoIncluido(ci.getObservar(), operacion.getFkTraCodigo().getFkExpCodigo(), operacion2, ci.getFkDocCodigo()));
                    }
                }
                for (DocumentoIncluido ci : docGuardados) {
                    docIncluDelegado.create(new DocumentoIncluido(ci.getObservar(), operacion.getFkTraCodigo().getFkExpCodigo(), operacion2, ci.getFkDocCodigo()));
                }
            }
            mostrarMensaje("", "Los documentos se transfirieron satisfactoriamente", FacesMessage.SEVERITY_INFO);
        }
        return "listar";
    }

    public String responderExt() {
        if (operacion.getOrigen() != null) {
            destinatarios.clear();
            destinatarios.add(new EmpleadoAdapter(operacion.getOrigen().getFkResCodigo(), operacion.getOrigen().getCarCodigo()));
            cc.clear();
            accion = EnumAccionOperacion.Respuesta;
            guardarExt();
            operacion.setOpeEstado(EnumEstadoOperacion.respondido);
            operacionDelegado.edit(operacion);
        } else {
            mostrarMensaje("", "No se pudo dar respuesta", FacesMessage.SEVERITY_ERROR);
        }
        return "";
    }

    public String tramitarExt() {
        operacionDelegado.AprobarDocExt(operacion);
        return "listar";
    }

    public String archivarExt() {
        if (operacion.getOpeEstado().equals(EnumEstadoOperacion.Tramitado)) {
            operacion.setOpeEstado(EnumEstadoOperacion.archivado);
            operacionDelegado.edit(operacion);
            mostrarMensaje("Archivado Satisfactorio: ", "La Solicitud se movio a la carpeta Archivados", FacesMessage.SEVERITY_INFO);
        } else {
            mostrarMensaje("Error al archivar: ", "Debe tramitar la solicitud", FacesMessage.SEVERITY_WARN);
        }
        return "";
    }

    public String enviar() {
        if (destinatarios.size() < 1) {
            mostrarMensaje("", "debe elegir un destinatario", FacesMessage.SEVERITY_ERROR);
        } else if (asunto.equals("")) {
            mostrarMensaje("", "debe ingresar un asunto", FacesMessage.SEVERITY_ERROR);
        } else if (areaSeleccionada == null) {
            mostrarMensaje("", "debe seleccionar un area", FacesMessage.SEVERITY_ERROR);
        } else if (tipDocSeleccionado == null) {
            mostrarMensaje("", "debe seleccionar un Tipo de Documento", FacesMessage.SEVERITY_ERROR);
        } else {
            documento = new DocumentoGenerado();
            documento.setDocContenido(editor);
            documento.setDocAsunto(asunto);
            documento.setFkTdoCodigo(tipDocSeleccionado);
            documento.setArea(areaSeleccionada);
            documento.setFkPerCodigoemp(empleado);
            documentoDelegado.guardarDocAdminist(documento);
            grabarTransaccion();
            limpiar();
            return "enviados";
        }
        return "";
    }

    private void grabarTransaccion() {
        if (!respuesta) {
            accion = EnumAccionOperacion.Informacion;
            expediente = new Expediente(null, new Date(), 2);
            setTransaccion(new Transaccion(null, new Date(), false, new Short("0")));
            getTransaccion().setFkSolCodigo(empleado.getPersonaNatural());
            getTransaccion().setFkSolicitado(empleado.getPersonaNatural());
            getTransaccion().setFkTrmCodigo(tramite);
            expedienteDelegado.create(expediente);
            getTransaccion().setFkExpCodigo(expediente);
            transaccionDelegado.create(getTransaccion());
            operacion = operacionDelegado.crearOperacion(getTransaccion());
            operacion.setCarCodigo(cargoSeleccionado);
            operacion.setOpeAccion(EnumAccionOperacion.Informacion);
            operacionDelegado.edit(operacion);
            getTransaccion().setOperacionActiva(operacion);
        } else {
            accion = EnumAccionOperacion.Respuesta;
            expediente = documentoIncSelec.getFkExpCodigo();
            setTransaccion(documentoIncSelec.getFkOpeCodigo().getFkTraCodigo());
            transaccion.setTraEstado(true);
            operacion = documentoIncSelec.getFkOpeCodigo();
            operacion.setOpeEstado(EnumEstadoOperacion.Tramitado);
            operacion.setOpeFechTram(new Date());
            operacionDelegado.edit(operacion);
            getTransaccion().setOperacionActiva(operacion);
        }

        List<Procedimiento> procedimientos = new ArrayList<Procedimiento>();
        procedimientos = procediDelegado.nextProced(getTransaccion());
        for (EmpleadoAdapter emp : destinatarios) {
            if (emp.isEmplead()) {
                operacion = new Operacion(EnumEstadoOperacion.Iniciado, new Date(), "", getTransaccion(), procedimientos.get(0), emp.getEmpleado(), emp.getCargo(), accion);
                operacionDelegado.create(operacion);
                docIncluDelegado.create(new DocumentoIncluido("", expediente, operacion, documento));
            } else {
                for (Empleado empl : empleadoDelegado.listarEmpleadoXArea(emp.getArea().getAreCodigo())) {
                    operacion = new Operacion(EnumEstadoOperacion.Iniciado, new Date(), "", getTransaccion(), procedimientos.get(0), empl, empl.getCargoEmpleadoCollection().get(0).getCargo(), accion);
                    operacionDelegado.create(operacion);
                    docIncluDelegado.create(new DocumentoIncluido("", expediente, operacion, documento));
                }
            }
        }
        for (EmpleadoAdapter emp : cc) {
            if (emp.isEmplead()) {
                operacion = new Operacion(EnumEstadoOperacion.Iniciado, new Date(), "", getTransaccion(), procedimientos.get(0), emp.getEmpleado(), emp.getCargo(), EnumAccionOperacion.Solo_Lectura);
                operacionDelegado.create(operacion);
                docIncluDelegado.create(new DocumentoIncluido("", expediente, operacion, documento));
            } else {
                for (Empleado empl : empleadoDelegado.listarEmpleadoXArea(emp.getArea().getAreCodigo())) {
                    operacion = new Operacion(EnumEstadoOperacion.Iniciado, new Date(), "", getTransaccion(), procedimientos.get(0), empl, empl.getCargoEmpleadoCollection().get(0).getCargo(), EnumAccionOperacion.Solo_Lectura);
                    operacionDelegado.create(operacion);
                    docIncluDelegado.create(new DocumentoIncluido("", expediente, operacion, documento));
                }
            }
        }
    }

//    public String getCookieValue(Cookie[] cookies, String cookieName, String defaultValue) {
//        for (int i = 0; i < cookies.length; i++) {
//            Cookie cookie = cookies[i];
//            if (cookieName.equals(cookie.getName())) {
//                return (cookie.getValue());
//            }
//        }
//        return (defaultValue);
//    }
    private void getUsuario() {
        Cookie[] cookies = ControladorAbstracto.getRequest().getCookies();
        String codUsuario = Utiles.getCookieValue(cookies, "Usuario", "nulo");
        if (!codUsuario.equals("nulo")) {
            empleado = empleadoDelegado.find(new Long(codUsuario));
            if (empleado == null) {
                mostrarMensaje("", "El usuario no es un empleado", FacesMessage.SEVERITY_ERROR);
            }
        }
    }

    public String listarDocExpor() {
        EnumEstadoOperacion estado;
        if (estadoComboArea) {
            areaSeleccionada = null;
        }
        if (estadoCert == 0) {
            estado = null;
        } else if (estadoCert == 1) {
            estado = EnumEstadoOperacion.Iniciado;
        } else if (estadoCert == 2) {
            estado = EnumEstadoOperacion.recepcionado;
        } else if (estadoCert == 1) {
            estado = EnumEstadoOperacion.Tramitado;
        } else {
            estado = EnumEstadoOperacion.archivado;
        }
        if (tipoTrans == 2) {
            documentosRecibidos = docIncluDelegado.listarDocumentosExpor(fechIni, fechaFin, estado, areaSeleccionada);
        } else {
            documentosRecibidos = docIncluDelegado.listarDocumentosExpor2(fechIni, fechaFin, estado, areaSeleccionada);
        }

        return "";
    }

    public String getIniArchivados() {
        getUsuario();
        listarArchivadosXUsuario();
        return "";
    }

    public String reportePdfDocInterno() {
        jasper = new JasperController();
        jasper.reporteDocInterno();
        return "";
    }

    public void setIniArchivados(String s) {
    }

    public String getSolArchivados() {
        getUsuario();
        listarTransArchXEmpleado();
        return "";
    }

    public void setSolArchivados(String s) {
    }

    public String getIniEnviados() {
        getUsuario();
        listarEnviadosXUsuario();
        return "";
    }

    public void setIniEnviados(String s) {
    }

    public String getIniBorrador() {
        getUsuario();
        listarBorradoresXUsuario();
        return "";
    }

    public void setIniBorrador(String s) {
    }

    public String getIniBandeja() {
        getUsuario();
        listarDocumentosXUsuario();
        return "";
    }

    public void setIniBandeja(String s) {
    }

    private void validarDoc() {
        if (tramite == null) {
            tramite = tramiteDelegado.buscar("Documento Administrativo");
        } else if (!tramite.getTrmNombre().equals("Documento Administrativo")) {
            tramite = tramiteDelegado.buscar("Documento Administrativo");
        }
        if (tramite == null) {
            mostrarMensaje("", "No se encuentra configurado el envio de documento interno, comunicarse con el administrador del sistema", FacesMessage.SEVERITY_ERROR);
        }
    }

    public String getInicializar() {
        getUsuario();
        respuesta = false;
        validarDoc();
        List<Area> la = areaDelegado.listarXEmpleado(empleado);
        if (la.size() == 1) {
            estadoComboArea = false;
            areaSeleccionada = la.get(0);
        }
        List<Cargo> ca = cargoDelegado.listarXAreayEmpleado(areaSeleccionada, empleado);

        if (ca.size() == 1) {
            setEstadoComboCargo(false);
            setCargoSeleccionado(ca.get(0));
        }
        return "";
    }

    public void setIniNuevo(String s) {
    }

    public String getIniNuevo() {
        getUsuario();
        estadoCC = false;
        return "";
    }

    public void setIniSolic(String s) {
    }

    public String getIniSolic() {
        getUsuario();
        listarTransXEmpleado();
        return "";
    }

    public String ver() {
        SimpleDateFormat formatter;
        formatter = new SimpleDateFormat("EEEEEEEE, dd 'de' MMMMM 'de' yyyy HH:mm:ss", Locale.getDefault());

        fecha = formatter.format(documentoIncSelec.getFkOpeCodigo().getOpeFecha());
        contenido = documentoIncSelec.getFkDocCodigo().getContenido();
        accion = documentoIncSelec.getFkOpeCodigo().getOpeAccion();
        if (accion.ordinal() == 3 || accion.ordinal() == 2) {
            lectura = true;
        } else {
            lectura = false;
        }
        return "leer";
    }

    public String verEnvio() {
        SimpleDateFormat formatter;
        formatter = new SimpleDateFormat("EEEEEEEE, dd 'de' MMMMM 'de' yyyy HH:mm:ss", Locale.getDefault());

        fecha = formatter.format(documentoIncSelec.getFkOpeCodigo().getOpeFecha());
        contenido = documentoIncSelec.getFkDocCodigo().getContenido();
        accion = documentoIncSelec.getFkOpeCodigo().getOpeAccion();
        lectura = true;
        return "leer";
    }

    public String responder() {
        if (documentoIncSelec.getFkOpeCodigo().getOpeEstado() == EnumEstadoOperacion.Tramitado) {
            mostrarMensaje("Invalido", "El documento ya fue respondido, solo puede reenviarlo o archivarlo", FacesMessage.SEVERITY_ERROR);
        } else {
            respuesta = true;
            estadoComboCargo = false;
            cargoSeleccionado = documentoIncSelec.getFkOpeCodigo().getCarCodigo();
            estadoComboArea = false;
            areaSeleccionada = areaDelegado.buscar(cargoSeleccionado);
            destinatarios.clear();
            destinatarios.add(new EmpleadoAdapter(empleadoDelegado.find(documentoIncSelec.getFkOpeCodigo().getFkTraCodigo().getFkSolCodigo().getSolCodigo()), cargoDelegado.buscarXTransaccion(documentoIncSelec.getFkOpeCodigo().getFkTraCodigo().getTraCodigo())));
            asunto = "Rpta: " + documentoIncSelec.getFkDocCodigo().getAsunto();
            return "resp";
        }
        return "";
    }

    public String reenviar() {
        validarDoc();
        respuesta = true;
        estadoComboCargo = false;
        cargoSeleccionado = documentoIncSelec.getFkOpeCodigo().getCarCodigo();
        estadoComboArea = false;
        areaSeleccionada = areaDelegado.buscar(cargoSeleccionado);
        destinatarios.clear();
        asunto = "Rpta: " + documentoIncSelec.getFkDocCodigo().getAsunto();
        return "reenv";
    }

    public String archivar() {
        if (lectura) {
            documentoIncSelec.getFkOpeCodigo().setOpeEstado(EnumEstadoOperacion.archivado);
            operacionDelegado.edit(documentoIncSelec.getFkOpeCodigo());
            return "archivados";
        } else if (documentoIncSelec.getFkOpeCodigo().getOpeEstado() == EnumEstadoOperacion.Tramitado) {
            documentoIncSelec.getFkOpeCodigo().setOpeEstado(EnumEstadoOperacion.archivado);
            operacionDelegado.edit(documentoIncSelec.getFkOpeCodigo());
            return "archivados";
        } else {
            mostrarMensaje("Invalido", "El documento no se puede archivar por que aun no ha sido respondido", FacesMessage.SEVERITY_ERROR);
        }
        return "";
    }

    public void setInicializar(String s) {
    }

    public String verCC() {
        estadoCC = true;
        return "";
    }

    public String agregarDestin() {
        try {
            getDestinatarios().add(empleadoAdap);
        } catch (Exception e) {
            return "";
        }
        return "";
    }

    public String agregarCC() {
        try {
            cc.add(empleadoAdap);
        } catch (Exception e) {
            return "";
        }
        return "";
    }

    public String eliminarDest() {
        destinatarios.remove(empleadoAdap);
        return "";
    }

    public String eliminarCC() {
        cc.remove(empleadoAdap);
        return "";
    }
    private String tamDesc;

    public String getTamDesc() {
        return tamDesc;
    }

    public void setTamDesc(String tamDesc) {
        this.tamDesc = tamDesc;
    }

    public String tamanioDesc() {
        if (descripcion.length() > 100) {
            descripcion = descripcion.substring(0, 100);
        } else {
            Integer tam = 100 - descripcion.length();
            tamDesc = tam.toString();
        }
        return "";
    }

    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }

    public EmpleadoAdapter getEmpleadoAdap() {
        return empleadoAdap;
    }

    public void setEmpleadoAdap(EmpleadoAdapter empleadoAdap) {
        this.empleadoAdap = empleadoAdap;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public List<EmpleadoAdapter> getDestinatarios() {
        return destinatarios;
    }

    public String getEditor() {
        return editor;
    }

    public void setEditor(String editor) {
        this.editor = editor;
    }

    public boolean isEstadoCC() {
        return estadoCC;
    }

    public void setEstadoCC(boolean estadoCC) {
        this.estadoCC = estadoCC;
    }

    public List<EmpleadoAdapter> getCc() {
        return cc;
    }

    public void setCc(List<EmpleadoAdapter> cc) {
        this.cc = cc;
    }

    public Area getAreaSeleccionada() {
        return areaSeleccionada;
    }

    public void setAreaSeleccionada(Area areaSeleccionada) {
        this.areaSeleccionada = areaSeleccionada;
    }

    public Empleado getEmpleado() {
        return empleado;
    }

    public void setEmpleado(Empleado empleado) {
        this.empleado = empleado;
    }

    public int getAnio() {
        return anio;
    }

    public void setAnio(int anio) {
        this.anio = anio;
    }

    public TipoDocumento getTipDocSeleccionado() {
        return tipDocSeleccionado;
    }

    public void setTipDocSeleccionado(TipoDocumento tipDocSeleccionado) {
        this.tipDocSeleccionado = tipDocSeleccionado;
    }

//    public int getAccion() {
//        return accion;
//    }
//
//    public void setAccion(int accion) {
//        this.accion = accion;
//    }
    public boolean isEstadoComboArea() {
        return estadoComboArea;
    }

    public void setEstadoComboArea(boolean estadoComboArea) {
        this.estadoComboArea = estadoComboArea;
    }

    public Cargo getCargoSeleccionado() {
        return cargoSeleccionado;
    }

    public void setCargoSeleccionado(Cargo cargoSeleccionado) {
        this.cargoSeleccionado = cargoSeleccionado;
    }

    public boolean isEstadoComboCargo() {
        return estadoComboCargo;
    }

    public void setEstadoComboCargo(boolean estadoComboCargo) {
        this.estadoComboCargo = estadoComboCargo;
    }

    public DocumentoIncluido getDocumentoIncSelec() {
        return documentoIncSelec;
    }

    public void setDocumentoIncSelec(DocumentoIncluido documentoIncSelec) {
        this.documentoIncSelec = documentoIncSelec;
    }

    public List<DocumentoIncluido> getDocumentosRecibidos() {
        return documentosRecibidos;
    }

    public void setDocumentosRecibidos(List<DocumentoIncluido> documentosRecibidos) {
        this.documentosRecibidos = documentosRecibidos;
    }

    public String getContenido() {
        return contenido;
    }

    public void setContenido(String contenido) {
        this.contenido = contenido;
    }

    public boolean isRespuesta() {
        return respuesta;
    }

    public void setRespuesta(boolean respuesta) {
        this.respuesta = respuesta;
    }

    public String getAsunto() {
        return asunto;
    }

    public void setAsunto(String asunto) {
        this.asunto = asunto;
    }

    public boolean isLectura() {
        return lectura;
    }

    public void setLectura(boolean lectura) {
        this.lectura = lectura;
    }

    public String getFecha() {
        return fecha;
    }

    public void setFecha(String fecha) {
        this.fecha = fecha;
    }

    public String getHora() {
        return hora;
    }

    public void setHora(String hora) {
        this.hora = hora;
    }

    public List<DocumentoGenerado> getBorradores() {
        return borradores;
    }

    public void setBorradores(List<DocumentoGenerado> borradores) {
        this.borradores = borradores;
    }

    public Plantilla getPlantillaSeleccionada() {
//        if (plantillaSeleccionada == null) {
//            editor = "";
//        } else {
//            editor = plantillaSeleccionada.getPlaContenido();
//        }
        return plantillaSeleccionada;
    }

    public void setPlantillaSeleccionada(Plantilla plantillaSeleccionada) {
        this.plantillaSeleccionada = plantillaSeleccionada;
//        if (plantillaSeleccionada == null) {
//            editor = "";
//        } else {
//            editor = plantillaSeleccionada.getPlaContenido();
//        }
    }

    public boolean isPublico() {
        return publico;
    }

    public void setPublico(boolean publico) {
        this.publico = publico;
    }

    public UploadedFile getUpFile() {
        return upFile;
    }

    public void setUpFile(UploadedFile upFile) {
        this.upFile = upFile;
    }

    public DocumentoExterno getDocSeleccionado() {
        return docSeleccionado;
    }

    public void setDocSeleccionado(DocumentoExterno docSeleccionado) {
        this.docSeleccionado = docSeleccionado;
    }

    public List<DocumentoExterno> getDocCargados() {
        return docCargados;
    }

    public void setDocCargados(List<DocumentoExterno> docCargados) {
        this.docCargados = docCargados;
    }

    public String getNroRef() {
        return nroRef;
    }

    public void setNroRef(String nroRef) {
        this.nroRef = nroRef;
    }

    public int getNroFolios() {
        return nroFolios;
    }

    public void setNroFolios(int nroFolios) {
        this.nroFolios = nroFolios;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public String getObservacion() {
        return observacion;
    }

    public void setObservacion(String observacion) {
        this.observacion = observacion;
    }

    public Empleado getEmpleadoSeleccionado() {
        return empleadoSeleccionado;
    }

    public void setEmpleadoSeleccionado(Empleado empleadoSeleccionado) {
        this.empleadoSeleccionado = empleadoSeleccionado;
    }

    public List<Transaccion> getTransacciones() {
        return transacciones;
    }

    public void setTransacciones(List<Transaccion> transacciones) {
        this.transacciones = transacciones;
    }

    public Transaccion getTransaccion() {
        return transaccion;
    }

    public void setTransaccion(Transaccion transaccion) {
        this.transaccion = transaccion;
    }

    public boolean isModalObserv() {
        return modalObserv;
    }

    public void setModalObserv(boolean modalObserv) {
        this.modalObserv = modalObserv;
    }

    public Solicitante getSolicitante() {
        return solicitante;
    }

    public void setSolicitante(Solicitante solicitante) {
        this.solicitante = solicitante;
    }

    public String getSexoSol() {
        return sexoSol;
    }

    public void setSexoSol(String sexoSol) {
        this.sexoSol = sexoSol;
    }

    public DireccionPersona getDireccionPersona() {
        return direccionPersona;
    }

    public void setDireccionPersona(DireccionPersona direccionPersona) {
        this.direccionPersona = direccionPersona;
    }

    public String getDniSolicitante() {
        return dniSolicitante;
    }

    public void setDniSolicitante(String dniSolicitante) {
        this.dniSolicitante = dniSolicitante;
    }

    public int getTipoDoc() {
        return tipoDoc;
    }

    public void setTipoDoc(int tipoDoc) {
        this.tipoDoc = tipoDoc;
    }

    public PersonaNatural getPersona() {
        return persona;
    }

    public void setPersona(PersonaNatural persona) {
        this.persona = persona;
    }

    public PersonaJuridica getEmpresa() {
        return empresa;
    }

    public void setEmpresa(PersonaJuridica empresa) {
        this.empresa = empresa;
    }

    public List<Operacion> getOperaciones() {
        return operaciones;
    }

    public void setOperaciones(List<Operacion> operaciones) {
        this.operaciones = operaciones;
    }

    public Operacion getOperacion() {
        return operacion;
    }

    public void setOperacion(Operacion operacion) {
        this.operacion = operacion;
    }

    /**
     * @return the modalAd
     */
    public boolean isModalAd() {
        return modalAd;
    }

    /**
     * @param modalAd the modalAd to set
     */
    public void setModalAd(boolean modalAd) {
        this.modalAd = modalAd;
    }

    /**
     * @return the plantilla
     */
    public Plantilla getPlantilla() {
        return plantilla;
    }

    /**
     * @param plantilla the plantilla to set
     */
    public void setPlantilla(Plantilla plantilla) {
        this.plantilla = plantilla;
    }

    /**
     * @return the tipoTrans
     */
    public int getTipoTrans() {
        return tipoTrans;
    }

    /**
     * @param tipoTrans the tipoTrans to set
     */
    public void setTipoTrans(int tipoTrans) {
        this.tipoTrans = tipoTrans;
    }

    /**
     * @return the estadoCert
     */
    public int getEstadoCert() {
        return estadoCert;
    }

    /**
     * @param estadoCert the estadoCert to set
     */
    public void setEstadoCert(int estadoCert) {
        this.estadoCert = estadoCert;
    }

    /**
     * @return the fechIni
     */
    public Date getFechIni() {
        return fechIni;
    }

    /**
     * @param fechIni the fechIni to set
     */
    public void setFechIni(Date fechIni) {
        this.fechIni = fechIni;
    }

    /**
     * @return the fechaFin
     */
    public Date getFechaFin() {
        return fechaFin;
    }

    /**
     * @param fechaFin the fechaFin to set
     */
    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }
}
